// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Basari bet Bahis Platformu Son Giriþ – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Kullanýmý kolay arayüzü ve çeþitli slot oyunlarýyla fark yaratan Basaribet canlý oyun platformu, slot oyunlarýna ilgi duyanlar için çok hoþ bir ortam yaratýr. En popüler slot oyun çeþitliliðinden jackpotlu slot oyunlarýna kadar her tarza hitap eden içerik bulmak kolaydýr. Lisanslý ve güvenilir oyun siteleri arasýnda online site büyük ödeme oranlarýyla kazanç olasýlýðýný yükseltir. Bahis sitesinde hesap oluþturmak çok kýsa sürede tamamlanýr. Eðlenceli casino slot deneyimi arayanlar için en iyi slot sitesi olarak öne çýkan Basari bet slot platformu, keyifli ve kazançlý saatler vadeder. Þimdi siz de başarıbet baðlantýyý kullanarak platforma giriþ yapabilirsiniz.

Basaribet Casino Platformu Mobil Uyumlu Slot Deneyimi Sunuyor

Basaribet oyun platformu, 2025 senesinde çok kazandýran casino slotlarý ve kazanç oraný yüksek slot alternatifleriyle merak uyandýrýyor. Bahis oyuncularý, casino slot oyunlarý arasýnda çeþitli eðlenceli ve büyük kazançlar saðlayacak oyunlar bulabilirler. Slot türleri hakkýnda 4 ana nokta:

  • Klasik tarzda slotlar: Genellikle 3 makaraya sahip, meyve figürleri ve kolayca oynanabilen yapýsýyla geçmiþi yansýtan bir deneyim saðlar. Örnek oyunlar arasýnda þunlar bulunur: Fruit Flash, Lemon Shine ve Cherry Flash
  • Video tabanlý slotlar: 5 makaralý olan, geliþmiþ grafikler animasyonlar ve bonus özelliklerle doludur. En çok oynanan slot türüdür. Birkaç örnekle açýklamak gerekirse: Sea of Gold
  • Megaways sistemine sahip slotlar: Her dönüþle çeþitli sembollerle donatýlmýþ bu tür oyun seçenekleri, çok sayýda kazanma kombinasyonu sunar. Þöyle ki: Twilight Quest Megaways ve Shadow Quest Megaways
  • Mega ödül slotlarý: Sabit ya da progresif jackpot sistemine sahip bu çeþit slotlarda mega ikramiyeler kazanç fýrsatlarý barýndýrýr. En fazla ilgi gören en çok kazandýran slot oyunlarýdýr. Bu slotlardan örnek: Enchanted Vault Jackpot, Mayan Riches Jackpot ve Enchanted Riches Jackpot

Basari bet oyun sitesi, bununla birlikte Bulletproof Games, Microgaming ve Evolution Gaming çeþitli slot saðlayýcýlarýný içerir.

Basaribet Platformunda Tatlý Bonanza Deneyimle ve Büyük Ödülleri Yakala

Sweet Bonanza makara oyunu, Pragmatic Play’in tasarladýðý tatmin edici ve ödül dolu bir oyundur. Þekerli meyve figürleri ve etkileyici özellikleriyle bahis tutkunlarýna büyük ödüller kazanma þansý sunar. Sweet Bonanza oyna seçeneðiyle þekerli ve meyveli temalý bu renkli oyunu tam güvenle oynayabilirsiniz.

Basari bet Casino’da Aviator’a Kolayca Eriþin

Aviator slotu, son dönemlerin en sevilen casino oyunlarýndan biridir. Þans oyunlarý meraklýlarý, uçak kalkýþ ve iniþ aþamalarýnda aviator bahis yaparak þanslarýný deðerlendirme fýrsatý bulurlar. Basaribet çevrimiçi casino sitesinde, oyunu denemek isteyenler için ücretsiz deneyim imkaný sunar. Aviator oyununu tanýyalým? Bu oyun türü, uçuþ sürecinin ilk anlarýndan itibaren artan bir çarpanla ilerlemeye baþlar ve oyuncular bu çarpanýn ne kadar yükseleceðini tahmin etmeye çalýþýr.

Basari bet Casino Kullanýcý Deneyiminin Artýlarý ve Eksileri

Bu dijital casino ortamý, zengin oyun çeþitliliði ve anlaþýlýr tasarýmýyla tercih sebebi oluyor.

Artý Yönler Eksi Yönler
Geniþ oyun koleksiyonu: Slot oyunlarý, rulet ve canlý masa oyunlarý seçenekleriyle
zengin oyun koleksiyonu sunuyor.
Yardým servisi: Müþteri Yardým Hizmetleri daha çabuk ve verimli olsa daha faydalý olurdu.
Eriþilebilir tasarým: Canlý oyun platformu, kullanýcý odaklý tasarýmýyla kolayca dolaþýlabilir ve oyunlara çabuk eriþim saðlýyor. Bonus gereksinimleri: Sunulan bonuslarýn çevrim þartlarý zaman zaman oyuncular için daha basit olabilirdi.
Hýzlý ve güvenli ödeme: Kazançlar 1 saat içinde ödenir ve emin ödeme seçenekleri sunulur. Bonus çeþitliliði: Mevcut promosyonlar oldukça sýnýrlý, daha fazla seçenek oyuncular için daha cazip olabilir.
Mobil uyumlu: Mobil cihazlar üzerinden problemesiz bir oyun deneyimi sunuyorlar.

Bahis platformu, kapsamlý oyun çeþitliliði ve kolay kullanýmýyla ön plana çýksa da, müþteri hizmetleri ve promosyon çeþitliliðinde iyileþtirmeler yaparak kullanýcýlar için daha tatmin edici bir deneyim saðlayabilir.

LEAVE A REPLYYour email address will not be published. Required fields are marked *Your Name

Design and Develop by Ovatheme